import axios from 'axios'
// 导入store实例
import store from '@/store'
// 导入自定义history
// import customHistory from '@/utils/history'
import { history as customHistory } from '@/router/history'



// 消息提示
import { message } from 'antd'
import { logoutAction } from '@/store/modules/login'
// console.log('路由对象：', customHistory)
// 创建axios新实例（自己）
const request = axios.create({
  // 后台基础地址
  // baseURL: 'http://geek.itheima.net/v1_0'
  // 动态：
  // 1. npm start => 读取的是.env.development中的环境变量
  // 2. npm run build => 读取的是.env.production中的环境变量
  baseURL: process.env.REACT_APP_URL
})

// 1. 请求拦截器：发请求之前
request.interceptors.request.use((config) => {
  // 场景：为header统一添加token
  const { token } = store.getState().login
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})


// 2. 响应拦截器：先获取到后台的response
request.interceptors.response.use((res) => {
  // 1. 请求成功200，进入到这里
  // console.log(1, res)
  // 场景：简化数据返回,这里返回后，页面或action函数中才能获取返回的数据
  return res.data
}, (error) => {
  // 2. 请求失败：400 401 500 等，进入到这里
  // 场景：处理401token失效，跳回登录页
  // console.dir(error)
  if (error.response.status === 401) {
    if (customHistory.location.pathname === '/login') return
    /**
     * 处理401token失效:
     * 1. 错误提示消息
     * 2. 清除本地token和用户信息
     * 3. 跳回登录页，携带当前页面地址（下次成功登录，可以跳回401的时候访问的页面）
     */
    console.log(222, customHistory)
    message.error(error.response.data.message)
    store.dispatch(logoutAction())
    // 在js中怎么跳页面？1. 不能用 useNavigate（） 2. 没有路由实例
    // 使用customHistory跳转
    // customHistory.replace({
    //   pathname: '/login',
    //   state: {
    //     from: customHistory.location.pathname
    //   }
    // })
    customHistory.replace(
      '/login',
      {
        from: customHistory.location.pathname
      }
    )
  }
  return Promise.reject(error)
})

export default request